Universal Storage Keys - developed by Fenn of BES Oasis shard
======================
If you choose to use this or develop on this, please leave this file intact.


Version:  Last modified Friday, May 1, 2009
========

Changelog:
==========

Version 2009-05-01
	-Entries:
		-Added GenericDistinguishableEntry.  This is similar to GenericEntry where the developer can specify the property of the specified item type that should be added/withdrawn from keys.  In addition, the developer can specify some other property within this item class that can distinguish it from other item types.  An example of such an item is the classic Fish, where the ItemID distinguishes the different types a player can get.  Note that this only works on zero-parameter constructor items for now.
		-Added ChampionSkullEntry to hold champion skulls
		-Overhauled PotionEntry and BeverageEntry add/withdraw mechanism.  These entries now leave behind an empty container when the potion/beverage is added to keys.  Consequently, the keys require a suitable container when withdrawing potions/beverages.  If you prefer the older method of potion/beverage add/withdraw, change the property "EmptyContents" in "Base Items\BaseStoreKey.cs" (line 18) from "true" to "false".
	-List Entries:
		-Created PowerScrollListEntry to hold power scrolls
		-Created StatCapScrollListEntry to hold stat cap scrolls
		-Modified SeedListEntry to use client localization data for seed names.  In addition, all seeds will be identified while in the keys.
	-Items:
		-Changed around ItemID's and names of various example items.  This was done to demonstrate the flexibility of the system.  You're not locked in to having to use the key graphic if you don't want to!
		-Added ChampionSkullKey to demonstrate use of ChampionSkullEntry
		-Added FishKey to demonstrate use of GenericDistinguishableEntry
		-Added PSKey to demonstrate use of PowerScrollListEntry and StatCapScrollListEntry
		-Switched Powder of Temperament listing in ToolKey from ToolEntry to GenericEntry.  This way, players can withdraw any desired quantity.  
	-Extras:
		-Created PetPowerScrollListEntry list entry for anyone who uses the FSATS animals system.  To enable this, uncomment line 3 of "Extras\Extras.cs".


Version 2008-12-19
	-Entries:
		-Created GenericEntry, a more universal, and easy to use, store entry system.  The developer need only specify the item type, the (integer) property
		to be stored in the keys, and the label for the entry.  NOTE: this only works on items with zero-parameter contstructors.  Examples of its use
		is in the new ExtrasKey
	-List Entries:
		-Created the LargeBODListEntry to hold large bulk order deeds.  Works well with standard smith/tailor bods, but need feedback
		on whether it's drop-in compatible with customized BOD systems.
		-Got confirmation that the SmallBODListEntry works well with tinker, fletcher, pet, and carpenter custom bod systems (thanks datguy!)
		-Added customizability to the List Entry displayed within the main key gump.  Now the developer can specify the artwork itemid and hue for
		any list entry (default is still the gold metal box, so your existing list entries will look the same unless you decide to customize it).
		Syntax is illustrated in the BODKey example item.
	-Items:
		-Added entries for large bulk orders to the BODKey example item
		-Created ExtrasKey to illustrate the use of keys for custom scripts.  Current examples include FS-ATS pet shrink leashes, and Lucid's Advanced
		Archery dip tubs.  As long as the item has some publically accessible integer property, and has a zero-parameter constructor, it can be stored
		in this same fashion.
	-Gumps:
		-Employed cropped labels in list entry gump.  Now long text won't spill over into other columns or off the pages.

Version 2008-12-14
	-List Entries:
		-Created the SmallBODListEntry to hold small bulk order deeds.  Works well with standard smith/tailor bods, but need feedback
		on whether it's drop-in compatible with customized BOD systems.  Note that there is currently no solution to store large bulk
		order deeds in a list entry
	-Items:
		-Created BODKey example item to demonstrate the storage of tailor and blacksmith small bulk order deeds

Version 2008-10-18
	-Items:
		-added lockdown security level access functionality for keys locked down in a house (thanks valan!)
		-the context menu once again works if the key is locked down in your house, and won't allow inappropriate access

Version 2008-09-26
	-Extras:
		-Streamlined the [keyguard command a bit.  The attachment will now delete when the player releases an item from [keyguard.
		Also cut down the message text a bit.  (thanks datguy!)
	-Entries:
		-Added support for IHasQuantity items in the ResourceEntry.  Now flour sacks will behave as expected (thanks datguy!)
	-Stash Entries:
		-Fixed a bug where numbers would not sort properly in the stash entry list gump. (thanks datguy!)
	-Gumps
		-Fixed a bug where the last column would not filter.
	-Server Modifications:
		-addressed an issue where IHasQuantity resources (flour sacks, water pitchers, etc) would not withdraw
		from keys when crafting.  (Thanks Celestine!)

Version 2008-09-14
	-Items:
		-The context menu no longer works if the key is locked down in your house.  (thanks Aurboda!)
		
Version 2008-09-11
	-Entries:
		-Keys will no longer fill from locked or trapped containers (thanks datguy!)
	-Stash Entries:
		-Defined a new kind of entry called a "stash entry".  This entry works similar to a list entry, where items are collected and
		individually listed.  The main difference is that the stash entry physically moves the item into storage, whereas the list
		entry reads the relevant properties from the item, and then deletes the item.  Although this is less efficient than a list
		entry, it opens up the possiblity to define stash entries to store pretty much any item.
		-NOTE: this system requires the CliLoc Handler project to function
	-Gumps:
		-Beefed up the gump button handling for standard entries.  There is now no longer a hard cap of 100 items for Item Lists (thanks Ednyved!)
		-Developed the Stash Entry Gump which displays the contents of a Stash Entry.  Within the gump are columns showing properties
		relevant to the item.  These properties can be specified in the code similar to list entries and item store entries.  In addition
		to sort/filter controls for each column, the user can add, remove, or move the columns to better suit their needs.
	-Items:
		-Developed the "Armory Key" example item to illustrate the use of a stash entry.  Within the definition of a stash entry,
		the developer can specify which properties to display by default, as well as which properties to offer for the user's additional
		customization.
		-Developed the Armor Key, Weapon Key, Clothing Key, and Jewelry Key.  They work just like the Armory Key, but with separated
		functions.  I gave this as an example of how you could split up the contents to more items if you so choose.
		-Added overridable properties CanUseFromPack and CanUseFromHouse to BaseStoreKey.  When you define your own custom keys, you can
		customize these to specify the scope of use.  Note that items with CanUseFromPack set false will not be able to be added to the Master Keys
	-Extras:
		-developed a section for extra optional features, which can be enabled using compiler directives.  Extra features require another
		custom script to function, and are disabled by default.
		-added extra command "[keyguard" which toggles whether an item will be able to be added to keys or not.
			NOTE: this requires the XML attachment system to function.  
			NOTE: To enable this, uncomment line 2 of the file Extras.cs in the folder Extras
	-Server Modifications:
		-included Tylius's instructions for server modifications as an alternate source of instructions to
		modify the server. (thanks Tylius!)
		-addressed an issue where recall runes were not being withdrawn from the keys.  Instructions to modify
		the server file CraftItem.cs are located in the Server Modifications folder, as well as Tylius' alternate
		instructions. (thanks madphatboy2!)
	-Entries:
		-Added a hard minimum withdrawal amount on tool entries.  This will prevent the production of many 1-use tools from one multi-use tool,
		a possible gold farm.
		

Version 2008-05-14
	-List Entries:
		-List Entries will once again accept insured/blessed items.  In fact, they'll keep track of this info for you.  If you put an 
		insured instrument in the instrument keys, they will come out insured.  This should allow repair deeds and addon deeds to properly
		add to the keys once again (thanks ineedhelp!)
	-Gumps:
		-added an withdrawl amount lock toggle button, so you can lock the withdrawl amount if you're annoyed with the text cursor being
		captured by the gump every time it reopens (thanks Celestine!)
		
Version 2008-04-07
	-Entries:  
		-Fill from Backpack will no longer draw from locked containers

Version 2008-04-04
	-Gumps:
		-Fixed a small bug in list entry gumps that incorrectly truncated the display and thus hid one entry per page (thanks ineedhelp!)

Version 2008-03-31
	-Gumps:
		-Fixed a bug with the list entry gump where text would not be displayed for zero-hue entries (thanks Aurboda!)
	-List Entries:
		-Added the BaseAddonDeedListEntry list entry to hold addon deeds (thanks Aurboda!)
	-Items:
		-Added the Addon Deed Keys example item to sport the BaseAddonDeedListEntry (thanks Aurboda!)


Version 2008-03-29
	-List Entries:
		-Fixed a bug with list entry filters.  You should now withdraw the desired item when you have applied
		a filter to a list entry
	-Gumps:
		-Fixed the list entry gump so it remains on the same page every time you withdraw/add.
		-Added page numbers (if applicable) to the list entry gump

Version 2008-03-13
	-Entries:
		-Fixed a bug with ResourceEntry which was causing it to block the addition of potion kegs into the Potion Key example item.
		Now both potions and potion kegs can be added and removed properly, as was originally intended.
		-Insured/Blessed instruments will no longer go into instrument entries
		-Improved BaseStoreKey.FindItembyType() static method so you can specify a (stackable) quantity to find.
		This makes it easier to integrate the automatic item withdrawl into your custom scripts.
		
	-List Entries;
		-Insured/Blessed items will no longer go into list entries, and thus lose their status
	-Items:
		-Insured keys added to the master key will now remain insured when they are removed.  I thought I had this nailed down, but just
		realized that insurance was not in the LootType enumerator.
		
Version 2008-03-02
	-List Entries:
		-Created the Repair Deed list entry to hold all kinds of repair deeds
	-Gumps:
		-Fixed crash issue in MasterKeyGump due to invalid button option selection (was rare, but possible if
		your players use razor and the macro is going hogwild pressing invalid button ID's ) (thanks Ednyved!)
	-Items:
		-Added the Repair Deed list entry to the Smithy's Keys example item
	-Server Modifications:
		-added a new optional server modification instruction that allows the Mark spell to withdraw a rune
		from keys if no runes are found in the backpack.  This can help save time for people making runebooks!
	-Commands:
		-created a directory for commands.  These can be found in the folder Commands, and can be removed if
		you prefer
		-created the player command [pick that will search the backpack and keys for a lockpick, and will bring
		up the target cursor to begin lockpicking

Version 2008-02-29
	-Server Modifications:
		-clarified the instructions for modifying the MainPlantGump.cs file to allow water and potions to
		withdraw during plant care
	-Entries:
		-added static method BaseStoreKey.FindItemByType( Container pack, Type type ) that will search the
		container for the requested type, and if not found, will search the container for any keys that contain
		that type.  If found, the item will be withdrawn and added to the pack, and a reference passed back. 
		This opens the door to allow direct withdraw from systems such as the custom [band, [bandself commands.
		Simply replace all pack.FindItemByType( typeof( Bandage ) ) with BaseStoreKey.FindItemByType( pack, 
		typeof( Bandage ) ).

Version 2008-02-28
	-Entries:
		-the Amount property of an entry can no longer be initialized with a negative number
		-the potion entry will now accept stacked potions properly (thanks HammerHand!)
	-Gumps:
		-updated Master Key gump to display both current amount and max amount of keys stored (thanks datguy!)
	-Compatibility
		-confirmed this code works with RunUO SVN 286.  This means this is compatable with RC1, RC2, and the SVN up to version 286!
	-Documentation
		-updated the documentation in notes.txt to include list entry info


Version 2008-02-22
	-List Entries:
		-Fabled fishing nets can now be properly stored and retrieved in the SpecialFishingNetListEntry class.(thanks datguy!)
		-Changed the SpecialFishingNetListEntry name display to simply show the class name.  This way, Fabled Fishing Nets are properly
		labelled

Version 2008-02-21
	-Gumps:
		-Shifted columns in Master Key gump to give key artwork a bit more room, and twiddled with button alignment a bit
		
		-Added the ability to manually define column separation points, giving developers more formatting control when configuring
		their storage solutions.  To insert a column separation point, add a ColumnSeparationEntry to the item's defined entries.
		-Added page number indication to item store gump (only shows if more than one page exists)
	-Entries:
		-Fixed ToolEntry so that blessed/insured tools will not add to the entry.  This will allow people to block certain tools from
		being sucked into their toolbox when they hit the "Fill from pack" button. (Thanks Muso!)
		-Developed the special column separation point entry ColumnSeparationEntry, used to allow more formatting and position control of 
		gump contents.  To use this, add a ColumnSeparationEntry to the item's list of entries, positioned where you want it to separate.
	-List Entries:
		-Developed SeedListEntry to contain all seeds.
	-Items;
		-Added column separatioon points to the Scribe's Tome example item to demonstrate their usefulness
		-Added a seed list entry to the Gardener's keys to hold seeds
		-Added context menu controls to all keys (including master keys).  "Open" and "Add" are self-evident, while "Refill from stock"
		activates the Fill from Backpack control.  Unfortunately I could not find a more suitable text in the unmodified cliloc 
		localization files
	

Version 2008-02-18
	-List Entries:
		-Maps removed from the treasure map list entry will no longer display incorrect pin locations.  Any maps busted from this
		bug can be repaired by adding to the list entry, then removing again. (Thanks Henry_R!)
	-Gumps:
		-Item Entry gump "Fill From Backpack" button now fills list entries.
		-Master key gump now has a "Fill entries from backpack" button, which goes through all keys stored in the master key, and 
		performs a fill from backpack on each one
	-Keys:
		-Developed the Jeweler's Keys example item based on user feedback (Thanks Henry_R!)
		-Developed the Scribe's Tome example item, containing all spell scrolls and some useful components (this actually was 
		introduced in the 2008-02-17 version, but I forgot to announce it)
		
	-Upgrade Notes:  If you are updating from the 2008-02-17 version, you need only replace all files but those contained in the
	Items folder.  There are new example items that you may be interested in, but otherwise you are free to leave your customized
	items alone.  If you are updating from a version previous to 2008-02-17, see the note listed in that version update.

Version 2008-02-17
	-Files:
		-Rearranged files into more sensible directories.  This was done to allow people upgrading from this version on to better
		understand which files need to be replaced and which files (eg. custom written keys) don't have to be.
		-Found and fixed a deserialization typo that would have caused any keys with saved expel inventory to fail world load (thanks datguy!)
	-Entries:
		-Fixed issue where store entries were becoming disconnected from keys when added, then withdrawn from master keys
		-Developed new entry type called a "List Entry".  the List Entry holds a list of complex storage entries, intended to be
		used for complex, non-identical items.  For example, treasure maps contain information about where the chest is buried 
		(location, map), what level the chest is, who decoded the map, etc.  The StoreEntry structure is not suitable to store such
		a complex object, whereas the List Entry is.
		-Developed InstrumentEntry to allow the stacking of uses of a particular instrument of a particular quality.  Will not accept
		instruments with any slayer properties.  To store instruments with slayer properties, use the InstrumentListEntry list entry
		that is discussed below.
		-Runic tool entry now properly checks the tool type with the desired type, so runic tinker kits will no longer be mistaken for
		runic hammers.  (thanks datguy!)
	-List Entries:
		-Developed Treasure Map list entry to hold treasure map's
		-Developed SOS list entry to hold sos's
		-Developed Special Fishing Net entry to hold special fishing nets
		-Developed Instrument list entry to hold any kind of musical instrument.  Stores info about quality, uses remaining, slayer
		properties, and crafter.  Will not stack uses.  To stack uses remaining, use the InstrumentEntry entry discussed above.
	-Gumps:
		-Performed slight aesthetic tweaking, changing size, layout, and textfield background style
		-Increased default maximum listing height from 300 to 400.  This will make listings taller before it resorts to multiple pages
		-Fixed problem with master keys where the column number would reset to 2 for any keys added to the master keys
		-Developed List Entry gump to display/access list entry contents.  User can sort/filter by any of the displayed properties
		-Adding/Removing from master keys now closes entry and list entry gumps to avoid issues with gumps referencing stores that
		have been added/removed from the master key
	-Keys:
		-Developed Treasure Hunter's Key to contain example list entries for treasure maps, sos's, special fishing nets, and some other 
		handy tools
		-Developed Bard's Key to contain example entries and list entries for instruments and instrument list entry storage
		-Added a few sensible entries (bola balls, bola's, zoogi fungus, powder of translocation) to the Adventurer's Keys example item
		-Added empty potion bottles and empty keg entries to the Potion Key example item
		-removed all but Hatchet from list of acceptable items in the lumberjacking tool entry of the Tool Key example item.  This was
		causing people to lose good weapons when they hit Fill From Backpack
		-Added Powder of Fortifying to Smith's Keys example item
	
	Upgrade Notes:
		-if you are upgrading from a previous version, you should compare the file location of the various files to understand where
		they have migrated to.  As usual, you don't have to replace the customizable example item files.  From here on in, when you
		are upgrading to a new version, all files located in the Items directory do not need to be replaced.  All other files in
		all other directories will typically need to be replaced.

Version 2008-02-14
	-Gumps:
		-Fixed issue with withdrawal from multi-page gump (thanks Henry_R)

Version 2008-02-13
	-Entries:
		-clarified how the PotionEntry withdraws in the documentation
		-ResourceEntry entries will no longer accept marked recall runes (thanks datguy!)
	-Items:
		-changed Name of GardenersKey item from "Gerdener's Keys" to "Gardener's Keys" (thanks datguy!)
		-Blessed/insured keys will remain blessed/insured when added/withdrawn from Master Keys (thanks datguy!)
		-added SmithyKey item example to illustrate the flexibility of combining different entry types in one storage item
	-Gumps:
		-added the ability to specify the number of columns to display on the gump.  This is done in the defined items, where the
		line "public override int DisplayColumns{ get{ return 2; } }" can be changed higher or lower.  WARNING: do not try to set
		this number to silly values.  Recommended lowest value is 1, highest value is around 4 for display purposes
		-added multi-page capability.  Pagination is automatic, and can be adjusted by monkeying with the MaxEntryDisplayHeight
		property within ItemStoreGump.cs.
	
	Upgrade Notes:
		-if you are upgrading from a previous version, and have your own set of custom defined items, you do not need to modify 
		any *EXCEPT* the MasterKey.cs and the BaseStoreKey.cs files.  These were modified to implement the various changes listed 
		above, feel free to keep your existing custom keys if you have worked on them.



	-if you are upgrading from a previous version, and have your own set of custom defined items, you do not need to modify any 
		*EXCEPT* the MasterKey.cs file.  This item was changed to allow blessed/insured keys added/removed from the Master Keys to 
		retain their loot status.  Other than that, feel free to keep your existing custom keys if you have worked on them.
		

Version 2008-02-11
	-Gumps:
		-touched up overall look of gumps slightly (thanks Ednyved!)
		-added ability for gumps to refresh when resources are withdrawn from craft/cast/archer/plant systems (thanks Joeku!)
	-Entries:
		-BeverageEntry entries will no longer take empty BaseBeverages (eg. empty glass pitchers) into the storage
	-Misc:
		-changed class name of Master Keys from MasterKey to MasterItemStoreKey to minimize conflicts with other custom work
	
	*WARNING!!! if you are upgrading from a previous version, you NEED to collect, empty, and delete all instances of the MasterKey from 
	players.  Applying this change without doing so will cause the server to nuke all instances of the keys in your world save, and
	will destroy anything players kept in the keys!!

Compatibility:
--------------

This was developed using a freshly downloaded RunUO 2.0 SVN server.  Compatibility with other servers is
guaranteed only so far as compatibility with a RunUO 2.0 SVN server.  

-RunUO 2.0 SVN version 286 (downloaded Feb 27, 2008)
-RunUO 2.0 RC2
-RunUO 2.0 RC1 (thanks winston1!)


Notes:
------

-Use of this package should require little understanding of how it works.  Modification of the items provided
should also require little understanding of it.  

-There are ready-made items in the "Items" subfolder.  These should give the developer an idea how things are configured, 
and how to modify them to suit their needs

-There are instructions and code in the "Server Modifications" subfolder.  These are optional changes to allow various 
systems direct access to the contents of the keys.



General Idea:
-------------

The storage key idea is based on the resource keys offered by Daat99's work.  These keys are developed with the ease of modification
in mind, and are relatively easy for a developer to insert and tweak to their liking.  This system offers (nearly) universal, easily 
programmable item storage objects for a RunUO 2.0-based server.  All resource/tool/quantity-based item storage is defined in a 
(rather complex) segregated storage management system, while the key objects themselves are relatively simple to modify.  

A developer can add/move/remove entries to the keys to customize them to their liking by editing a simple block of data found at
the beginning of each item's code.  The system automatically handles all world serialization/deserialization, and also performs a
synchronization between world save data and script data upon each world load.  This means that a developer can easily tweak the key
definition code to their liking, and expect no hassle when their shard reboots.  All contents of the keys are maintained, even if
the developer removes a particular entry from the keys.  If an entry is removed, all keys with nonzero quantity of that entry will
expel it to the user's backpack upon the next time that key is used.

Through simple server script modifications, these keys can (optionally) be tied into systems including spell casting, crafting, 
plant care, and archery, whereby the appropriate items are withdrawn directly from the keys when needed.  Instructions for these
modifications are found in the "Server Modifications" folder.

From a player's standpoint, the withdrawal amount is configurable (to within reasonable limitations), and items that fit into 
commodity deeds can be withdrawn directly into deeds, should the player have the appropriate gold in their bank to purchase the 
commodity deed (5g - default for RunUO 2.0 SVN server).

To further improve storage, a special kind of key, called the Master Key, can hold any and all keys generated by this system.  A
player with a master key needs only carry the one key, with all the other key data stored within the master key.  


Limitations:
------------

This system has been defined to support the following item types:  
-resources: items that are quantified by the Amount property, both with and without support for ICommodity interface
-tools: items that are quantified by the UsesRemaining property, and support the IUsesRemaining interface
-runic tools: tools that are childs of the BaseRunicTool class, and require a CraftResource property in their constructor
-ancient smithy tools: tools that offer a smithing skill bonus when equipped
-potions: potion bottles and kegs that support the PotionEffect enumerator
-beverages: BaseBeverage objects that support the BeverageType enumerator
-instruments: any BaseInstrument that has no slayer properties.

In addition, the system can support the storage of non-indistinguishable items.  Examples include treasure
maps, where there is a variety of data (eg. player who decoded it) that can't be easily collapsed into a
quantified numerical value.  For these items, they're stord in a special entry called a "list entry", which
creates and manages a list of the data stored in the keys.  This data can be viewed, sorted, and filtered by
the user of the keys, allowing for easy storage and relocation.  

Items that can be stored in the list entry format include:
-treasure maps
-sos's
-fishing nets
-instruments
-seeds

Recently, the "stash entry" was developed to accomodate comples items.  These can hold items similar to the list entry, but
are much more versatile.

Add Behaviour:
--------------

The user can select to add individual items using a targeting cursor, or by a single click of a button, pull in any and all 
supported items contained in the user's backpack.  Some entries support the addition of more than one type.  Note that although
more than one type can be added to a particular entry, only one type can be withdrawn from that entry.


Withdrawal Behaviour:
--------------------

Resources:  can withdraw 1 to 60000 at a time (only 1 if not stackable), and can add to a commodity deed if the user has 5g in their
 bank, and the resource supports the ICommodity interface

Tools: can withdraw any number of uses.  If the amount withdrawn is going to leave less than 50 behind, the extracted tool
 gives all remaining uses.  (eg. if 60 uses are in the tool, and the user selects 50, then there would be only 10 uses left, so the
 system just gives all 60).  Note that minimum withdrawal amount in the example file ToolKey.cs is set to only allow a minimum 
 withdrawal of 50 uses as well.  This is done to block exploitation of mass tool production

RunicTools/ASHTools: can withdraw any amount of uses remaining

Potions: can withdraw either individual potions, or 100 charges into keg.  If the user tries to withdraw any amount less than
 100, only a single potion will be given.  If the user tries to withdraw 100 or more, then (provided there is at least that amount in
 the storage), 100 charges will be withdrawn into a full keg. This is done to prevent mass production of kegs.  

Beverages: always withdraws enough to fill the beverage container, regardless of what the user selects


Installation:
-------------

Basic installation:  Drop this entire folder somewhere in your Scripts Directory.  Be mindful of class name conflicts.  

Integrated withdrawal installation: read through the files listed in the "Server Modifications" directory, and follow their
instructions.  The blocks are, for the most part, ready to be dropped in and good to go, but be mindful of positioning, and
also be careful if you have already modified these files.  It may help to leave the comments surrounding this code for easy
identification and, if necessary, removal.


Integration:
------------

Note that I make no provision for how these objects are integrated into your shard.  I leave it up to you do determine if you
want these to be purchasable, craftable, quest/vet reward, loot, or whatever.  If you need help integrating this, I am sure
the RunUO Community is full of examples and info to help you on your way.


Deinstallation:
---------------

Basic deinstallation: Remove this entire folder from your scripts directory.

Integrated withdraw deinstallation: track down and remove all code added to your server from the "Server Modifications".


Contact:
--------

Questions, comments?  Contact me at the RunUO Forums under usrename Fenn.